package cn.biplam.back.sql.ddl;

import java.io.Serializable;
import java.util.Iterator;
import java.util.Map.Entry;

import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.KvMap;

/**
 * 提供表的列结构的语义模型
 * @author 	WangSong
 * @create 	Mar 11, 2009 7:16:22 PM
 * @version 1.0
 */
public class Column implements Serializable{

	private static final long serialVersionUID = -191793273956024039L;
	/**存储该列结构的多个字段*/
	private KvMap<Integer, Field> kvmColumns=null;
	/**列字段计数器*/
	private Integer mCount=new Integer(0);

	/**
	 * 构造方法
	 */
	public Column(){
		this.kvmColumns=new KvMap<Integer, Field>();
		this.mCount++;
	}

	/** 私有方法
	 * 拼接出一个Field中的通用结构定义语句
	 * @param sb
	 * @param ite
	 */
	private void append(StringBuilder sb,
			Iterator<Entry<Integer, Field>> ite){
		/**使用Field的toString()，以获取default描述
		 			getType()仅获取字段数据类型描述*/
		Field mField=ite.next().getValue();
		sb.append(mField.toString());
	}

	/**
	 * 存入一个字段
	 * @param mField
	 * @throws ErrorMessage 
	 */
	public void put(Field mField) throws ErrorMessage{
		kvmColumns.put(mCount++, mField);
	}

	/**
	 * 返回列结构中的字段数量
	 * @return	字段数量
	 */
	public int size(){
		return this.mCount;
	}

	/**
	 * 返回表列结构的通用定义语句
	 * @return	表列结构的通用定义语句
	 */
	public String toString(){

		/**列字段迭代器*/
		Iterator<Entry<Integer, Field>> ite ;

		/**初始化*/
		ite= kvmColumns.getIterator();
		StringBuilder sb = new StringBuilder();

		if(ite.hasNext()){
			this.append(sb,ite);
		}
		while(ite.hasNext()){
			sb.append(",\n");
			this.append(sb,ite);
		}
		sb.append("\n");

		return sb.toString();
	}

}
